package com.qianfeng.smsplatform.search.service.impl;

/**
 * @author fjw
 * @version 1.0
 * @date 2019/12/3 10:27
 */

import com.qianfeng.smsplatform.common.model.Standard_Submit;
import com.qianfeng.smsplatform.search.service.DataFilterManager;
import com.qianfeng.smsplatform.search.service.FilterChain;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * todo 执行每个过滤器
 */
@Component
@Slf4j
public class DataFilterManagerImpl implements DataFilterManager {

    //利用spring的特性 注入 过滤器 到我们定义的map 中
    // 启动key 为 服务的名字 value 为 filter都实现的接口的类型
    //这里会 帮我们自动注入
    @Autowired
    private Map<String, FilterChain> filterChainMap;

    //从配置文件 中加载我们需要执行的过滤器 我们也可以调整过滤器的顺序
    // 在实际开发中我们 要说成在redis 中获取这些过滤器
    @Value("${smsplatform.filters}")
    private String filters;


    @Override
    public void dealWith(Standard_Submit submit) {
        //通过 ， 把配置文件中的这些 过滤器分割成 一个数组
        //filters = "smsOpIDFilter,smsBlackFilter,smsKeyWordFilter,smsFreeFilter,smsRouterFilter";
        String[] split = filters.split(",");
        //遍历下这个集合 得到的结果是我们需要执行的过滤器 的到的先后顺序就是我们 过滤器的执行顺序
        //传入的参数不能为空 数组不能为空
        log.info("开始要执行过滤了");

        if (submit!=null&&split!=null){

            try {
                for (String s : split) {
                    //不判断了 执行 根据这个值去map 中去 取值
                    FilterChain filterChain = filterChainMap.get(s);
                    //这样我们就可执行每个过滤器中的方法了
                    boolean b = filterChain.doFilter(submit);
                    if (!b){
                        break;
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
                log.debug("过滤错误",e.getMessage() );
            }
        }


    }
}
